package top.lfyao.designpattern.details.factory.simple;

/**
 * 使用工厂方法生成实例完成运算操作
 * 思想：
 *      1.客户端界面（Calculator)和计算业务逻辑 分离， 通过业务的封装，让业务逻辑与界面逻辑分开，降低耦合度
 *      2.将计算业务逻辑中算法抽取出来改成运算类（Operation），用抽象类和继承来建立不同算法类，提高可复用性和可扩展性，例如加一种算法就新建一个类去继承Operation
 *      3.通过建立工厂类来实例化具体所需的算法类
 *          3.1 多态（继承中的向上造型 来实现具体算法类的不同实现）
 *          3.2 只需要输入运算符号，就能实例化合适化合适的对象（abstraction包中采用反射和map集合方法来实现，更方便扩展）
 *          3.3 method包中是工厂方法模式与策略模式的结合
 *
 */
public class Calculator {
   public static void main(String[] args){
       Operation operation;
       char operator;
       operator = '&';
       operation = OperationFactory.createOperation(operator);
       operation.numberA=2.6;
       operation.numberB=3;
       System.out.println(operation.result());

   }
}
